package com.spring.gop.proj.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.spring.gop.proj.interfaces.LoginService;
import com.spring.gop.proj.interfaces.SearchService;
import com.spring.gop.proj.model.Search;
import com.spring.gop.proj.model.User;

@Controller
@RequestMapping("/login/*")
@SessionAttributes("user")
public class LoginController {

	@Autowired private LoginService loginService;
	@Autowired private SearchService searchService;
	
	@RequestMapping(value="/login", method=RequestMethod.GET)
	public void loginForm() {}
	
	@RequestMapping(value="/login", method=RequestMethod.POST)
	public String login(@ModelAttribute("newUser")User user, HttpSession session) {
		User checkUser = loginService.selectUser(user.getMember_id());
		if(checkUser != null) {
			if(checkUser.getMember_id().equals(user.getMember_id()) && checkUser.getMember_pw().equals(user.getMember_pw())) {
				
				session.setAttribute("user", checkUser);
				session.setAttribute("login", true);
				
				String targetUrl = (String)session.getAttribute("targetUrl");
				if(targetUrl != null) return "redirect:" + targetUrl;
				else {
					
					String returnUrl = (String)session.getAttribute("returnUrl");
					session.removeAttribute("returnUrl");
					if(returnUrl != null) return "redirect:" + returnUrl;
					else return "redirect:/main";
				}
			} else session.setAttribute("message", "잘못 입력하셨습니다."); return "redirect:finduser";
		} else session.setAttribute("message", "잘못 입력하셨습니다."); return "redirect:finduser";
	}
	
	@RequestMapping(value="/logout", method=RequestMethod.GET)
	public String logout(HttpSession session) {
		session.invalidate();
		return "redirect:login";
	}
	
	@RequestMapping(value="/search", method=RequestMethod.GET)
	public void searchForm() {}
	
	@RequestMapping(value="/searchId", method=RequestMethod.POST)
	public String searchId(@ModelAttribute("newSearch")Search search, HttpSession session){

		String birth = search.getYear() +"/"+ search.getMon() +"/"+ search.getDay();
		String phone = search.getHeader() +"-"+ search.getCenter() +"-"+ search.getTail();

		User user = searchService.searchId(search.getMember_name(), birth, phone);

		if(user != null){
			if(user.getMember_id() != null){
			session.setAttribute("message", user.getMember_id());			
			return "redirect:finduser";
			}else return "redirect:searchfail";
		}else return "redirect:searchfail";
	}
	
	@RequestMapping
	public void searchfail() {}
	
	@RequestMapping(value="/searchPw", method=RequestMethod.POST)
	public String searchPw(@ModelAttribute("newSearch")Search psearch, HttpSession session){

		String pbirth = psearch.getPyear() +"/"+ psearch.getPmon() +"/"+ psearch.getPday();
		String pphone = psearch.getPheader() +"-"+ psearch.getPcenter() +"-"+ psearch.getPtail();
		
		User userpw = searchService.searchPw(psearch.getPmember_id(), psearch.getPmember_name(), pbirth, pphone);

		if(userpw != null){
			if(userpw.getMember_pw() != null){	
			
			session.setAttribute("message", userpw.getMember_pw());
						
			return "redirect:finduser";
			}else return "redirect:searchfail";
		}else return "redirect:searchfail";
	}		
	
	@RequestMapping(value="/finduser", method=RequestMethod.GET)
	public void finduser() {}
	
	@RequestMapping(value="/loginalert")
	public void loginalert() {}
	
	@RequestMapping(value="/checkLogin", method=RequestMethod.GET)
	public String checkLogin(HttpSession session, HttpServletRequest request) {
		User user = (User)session.getAttribute("user");
		
		int idx = 0; // 페이지 위치 설정하기
		if(request.getParameter("idx").equals("")) idx = 0; // 페이지 정보가 없을경우 메인페이지로 설정
		else idx = Integer.parseInt(request.getParameter("idx")); // 페이지 정보가 있을경우 해당페이지로 설정
		String returnUrl = ""; // 로그인 후 되돌아올 url을 저장하는 변수
		String target = request.getParameter("target"); // 로그인 후 거쳐야할 페이지를 확인하는 변수
		String targetUrl = ""; // 로그인 후 거쳐야할 url을 저장하는 변수
		if(target != null) { // 로그인 후 거쳐야할 페이지를 확인
			if(target.equals("ticket")) { // 로그인 후 거쳐야할 페이지가 충전페이지라면
				session.setAttribute("targetUrl", "/ticket/start");
				targetUrl = "/ticket/start";
			} else if(target.equals("qna")) { // 로그인 후 이동해야 할 페이지가 qna 페이지일 경우
				idx = 7; // qna 유저모드로 페이지 정보 수정
			}
		}
		
		if(idx == 0) { // 메인페이지로 이동시키기
			returnUrl = "/main";
		} else if(idx == 1) { // 영화리스트 페이지로 이동시키기
			returnUrl = "/movie/list";
		} else if(idx == 2) { // 영화디테일 페이지로 이동시키기
			returnUrl = "/movie/moviedetail?num=" + session.getAttribute("movieNum");
			session.removeAttribute("movieNum");
		} else if(idx == 3) { // 연혁 페이지로 이동시키기
			returnUrl = "/profile/main";
		} else if(idx == 4) { // 공지사항 리스트 페이지로 이동시키기
			returnUrl ="/help/notice/list";
		} else if(idx == 5) {
			returnUrl = "/help/notice/read?num=" + session.getAttribute("listNum");
			session.removeAttribute("listNum");
		} else if(idx == 6) {
			returnUrl = "/help/faq/list";
		} else if(idx == 7) {
			returnUrl = "/help/qna/qna_user/insert";
			if(user != null) target = null;
		}
		session.setAttribute("returnUrl", returnUrl);
		
		if(user == null) {
			if(target == null) return "redirect:/login/login"; // 거쳐야할 페이지가 없다면 바로 로그인 페이지로
			else return "redirect:/login/loginalert"; // 거챠아할 페이지가 있다면 로그인 알림창 페이지로
		} else {
			if(target == null) return "redirect:" + returnUrl; // 거쳐야할 페이지가 없다면 되돌아올 페이지로 이동
			else return "redirect:" + targetUrl; // 거쳐야할 페이지가 있다면 타겟페이지로 이동
		}
	}
}




























